iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
自我挑戰組

那些Mysql我不知道的事系列 第 15

InnoDB的表格空間-Part3(系統表格空間)

  • 分享至 

  • xImage
  •  

在了解了獨立表格空間的基本結構後,系統表格空間就好了解多了,基本上很類似,但系統表格空間需要紀錄一些與整個系統相關的資訊,所以多一些用來記錄這些資訊耊面,因為其是最重要的,相當於所有表格空間的帶頭大哥,所以他的SpaceID是0。

我們知道獨立表格空間第一組的前三頁固定是[FSP_HDR(頁號0)、IBUF_BITMAP(頁號1)、INODE(頁號2)]
而系統表格空間又多了以下五個頁面

  • SYS(insert buffer header):儲存change buffer的表頭資訊
  • INDEX(insert buffer root):儲存change buffer的根頁面
  • TRX_SYS(transaction system):交易系統的相關資訊
  • SYS(fisrt rollback segment):第一個回覆段的資訊
  • SYS(data dictionary header):資料字典表頭資訊

Innodn資料字典

要實現一個插入紀錄的動作,Mysql除了保存我們要插入的使用者紀錄外,還需要其他額外的資訊。比如:

  • 表屬於那個表格空間,表內有多少列?
  • 表對應的每一列類型是什麼?
  • 表有多少索引?每個索引對應那些欄位?該索引的根頁面在那個表格空間的那個頁面?
  • 表有那些外鍵?外鍵對應表的那些列?
  • 某個表格空間對應的檔案系統上的檔案路徑是什麼?
    這些為了更進一步管理使用者紀錄而不得不引入的一些額外機料,又稱為中繼資料。

Innodb儲存引擎特意定義了一系列的內部系統表來紀錄這些中繼資料。

  • SYS_TABLES:整個Innodb儲存引擎中所有表的資訊
  • SYS_COLUMNS:整個Innodb儲存引擎中所有列的資訊
  • SYS_INDEXES:整個Innodb儲存引擎中所有索引的資訊
  • SYS_FIELDS:整個Innodb儲存引擎中所索引對應的列的資訊
  • SYS_FOREIGN:整個Innodb儲存引擎中所有外鍵的資訊
  • SYS_FOREIGN_COLS:整個Innodb儲存引擎中所有外鍵對應的列的資訊
  • SYS_TABLESPACES:整個Innodb儲存引擎中所有的表格空間資訊
  • SYS_DATAFILES:整個Innodb儲存引擎中所有表格空間對應的檔案系統路徑資訊
  • SYS_VIRTUAL:整個Innodb儲存引擎中所有虛擬生成列的資訊
    這些系統表也被稱為資料字典,它們都是以B+樹的形式保存在系統表格空間的某些頁面。
    來看看幾個較重要的表的詳細資訊
  1. SYS_TABLES表
  • NAME:表的名稱
  • ID:表的唯一ID
  • N_COLS:該表擁有列的個數
  • TYPE:表的類型,紀錄了些檔案格式、行格式、壓縮等資訊
  • MIX_ID:已過時,忽略
  • MIX_LEN:表的額外屬性
  • CLUSTER_ID:未使用,忽略
  • SPACE:表所屬表格空間的ID
    該表有兩個索引
    (1)以NAME列為主鍵的聚簇索引
    (2)以ID列建立的二級索引
  1. SYS_COLUMNS表的列
  • TABLE_ID:所屬表的ID
  • POS:該列在表中是第幾列
  • NAME:該列的名稱
  • MTYPE:主資料類型(ex:int, char, varchar之類的)
  • PRTYPE:精確資料類型,修飾主資料的那些東西(ex:是否允許NULL之類的)
  • LEN:該列最多佔用儲存空間的位元組數
  • PREC:該列的精度(似乎沒有使用),預設值都是0
    該表只有一個索引 - 以(TABLE_ID,POS)列為主鍵的聚簇索引
  1. SYS_INDEXES表的列
  • TABLE_ID:該索引所屬表對應的ID
  • ID:索引的唯一ID
  • NAME:索引的名稱
  • N_FIELDS:索引包含列的個數
  • TYPE:索引類型(ex:聚簇索引, 唯一二級索引, 全文索引之類的)
  • SPACE:索引根頁面所在的表格空間ID
  • PAGE_NO:索引根頁面所在的頁面號
  • MERGE_THRESHOLD:如果頁面中的紀錄被刪除到某個比例,就嘗試把該頁和相鄰頁合併,這個值就是這個比例
    該表只有一個索引 - 以(TABLE_ID,ID)列為主鍵的聚簇索引
  1. SYS_FIELDS表的列
  • INDEX_ID:該列所屬索引的ID
  • POS:該列在索引列中是第幾列
  • COL_NAME:該列的名稱
    該表只有一個索引 - 以(INDEX_ID,POS)列為主鍵的聚簇索引

除了這四個重要的表外,系統表格空間的第7個頁面紀錄了資料字典的表頭資訊(未來有需要在進一步說明)


上一篇
InnoDB的表格空間-Part2(各類型頁面詳細情況)
下一篇
存取方法
系列文
那些Mysql我不知道的事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言